Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ


Displaying Raw β€’ Download

feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/component/MessageScreenComponents.kt f4506450168d047b225b277620bf0f1d5dcd13b5 (f4506450) Text, 30.18 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooManyFunctionsTa5d6ff"Tb4b4b4)
Tf0883e@fileTb4b4b4:Te6edf3OptInTb4b4b4(Te6edf3ExperimentalMaterial3ExpressiveApiTff7b72::Te6edf3classTb4b4b4)

Tff7b72package T7ee787org.meshtastic.feature.messaging.component

Tff7b72import T7ee787androidx.compose.animation.AnimatedVisibility
Tff7b72import T7ee787androidx.compose.foundation.background
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Box
Tff7b72import T7ee787androidx.compose.foundation.layout.BoxScope
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.Spacer
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.size
Tff7b72import T7ee787androidx.compose.foundation.layout.width
Tff7b72import T7ee787androidx.compose.foundation.lazy.LazyListState
Tff7b72import T7ee787androidx.compose.foundation.lazy.LazyRow
Tff7b72import T7ee787androidx.compose.foundation.lazy.items
Tff7b72import T7ee787androidx.compose.foundation.shape.RoundedCornerShape
Tff7b72import T7ee787androidx.compose.material3.Badge
Tff7b72import T7ee787androidx.compose.material3.BadgedBox
Tff7b72import T7ee787androidx.compose.material3.Button
Tff7b72import T7ee787androidx.compose.material3.CircularProgressIndicator
Tff7b72import T7ee787androidx.compose.material3.DropdownMenu
Tff7b72import T7ee787androidx.compose.material3.DropdownMenuGroup
Tff7b72import T7ee787androidx.compose.material3.DropdownMenuItem
Tff7b72import T7ee787androidx.compose.material3.ExperimentalMaterial3Api
Tff7b72import T7ee787androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
Tff7b72import T7ee787androidx.compose.material3.FloatingActionButton
Tff7b72import T7ee787androidx.compose.material3.HorizontalDivider
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.IconButton
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.MenuDefaults
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.material3.TextField
Tff7b72import T7ee787androidx.compose.material3.TextFieldDefaults
Tff7b72import T7ee787androidx.compose.material3.TopAppBar
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.draw.clip
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.text.style.TextOverflow
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787kotlinx.coroutines.CoroutineScope
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.jetbrains.compose.resources.pluralStringResource
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.database.entity.QuickChatAction
Tff7b72import T7ee787org.meshtastic.core.model.Message
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.NodeAddress
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.alert_bell_text
Tff7b72import T7ee787org.meshtastic.core.resources.cancel
Tff7b72import T7ee787org.meshtastic.core.resources.cancel_reply
Tff7b72import T7ee787org.meshtastic.core.resources.clear
Tff7b72import T7ee787org.meshtastic.core.resources.clear_selection
Tff7b72import T7ee787org.meshtastic.core.resources.copy
Tff7b72import T7ee787org.meshtastic.core.resources.delete
Tff7b72import T7ee787org.meshtastic.core.resources.delete_messages
Tff7b72import T7ee787org.meshtastic.core.resources.delete_messages_title
Tff7b72import T7ee787org.meshtastic.core.resources.download
Tff7b72import T7ee787org.meshtastic.core.resources.filter_disable_for_contact
Tff7b72import T7ee787org.meshtastic.core.resources.filter_enable_for_contact
Tff7b72import T7ee787org.meshtastic.core.resources.filter_hide_count
Tff7b72import T7ee787org.meshtastic.core.resources.filter_settings
Tff7b72import T7ee787org.meshtastic.core.resources.filter_show_count
Tff7b72import T7ee787org.meshtastic.core.resources.navigate_back
Tff7b72import T7ee787org.meshtastic.core.resources.new_messages_below
Tff7b72import T7ee787org.meshtastic.core.resources.overflow_menu
Tff7b72import T7ee787org.meshtastic.core.resources.quick_chat
Tff7b72import T7ee787org.meshtastic.core.resources.quick_chat_hide
Tff7b72import T7ee787org.meshtastic.core.resources.quick_chat_show
Tff7b72import T7ee787org.meshtastic.core.resources.reply
Tff7b72import T7ee787org.meshtastic.core.resources.replying_to
Tff7b72import T7ee787org.meshtastic.core.resources.scroll_to_bottom
Tff7b72import T7ee787org.meshtastic.core.resources.search_messages
Tff7b72import T7ee787org.meshtastic.core.resources.select_all
Tff7b72import T7ee787org.meshtastic.core.resources.translation_download_message
Tff7b72import T7ee787org.meshtastic.core.resources.translation_download_title
Tff7b72import T7ee787org.meshtastic.core.resources.translation_downloading
Tff7b72import T7ee787org.meshtastic.core.resources.unknown
Tff7b72import T7ee787org.meshtastic.core.ui.component.MeshtasticDialog
Tff7b72import T7ee787org.meshtastic.core.ui.component.MeshtasticTextDialog
Tff7b72import T7ee787org.meshtastic.core.ui.component.NodeKeyStatusIcon
Tff7b72import T7ee787org.meshtastic.core.ui.component.SecurityIcon
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ArrowBack
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ArrowDownward
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ChatBubbleOutline
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Close
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Copy
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Delete
Tff7b72import T7ee787org.meshtastic.core.ui.icon.FilterList
Tff7b72import T7ee787org.meshtastic.core.ui.icon.FilterListOff
Tff7b72import T7ee787org.meshtastic.core.ui.icon.KeyboardArrowDown
Tff7b72import T7ee787org.meshtastic.core.ui.icon.KeyboardArrowUp
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.More
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Muted
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Reply
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Search
Tff7b72import T7ee787org.meshtastic.core.ui.icon.SelectAll
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Settings
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Unmuted
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Visibility
Tff7b72import T7ee787org.meshtastic.core.ui.icon.VisibilityOff
Tff7b72import T7ee787org.meshtastic.feature.messaging.DeliveryInfo
Tff7b72import T7ee787org.meshtastic.feature.messaging.TranslationDialogState
Tff7b72import T7ee787org.meshtastic.proto.ChannelSet

T8b949e// region ── ScrollToBottomFab ──

T8b949e/**
* A FloatingActionButton that scrolls the message list to the bottom (most recent messages).
*
* @param coroutineScope The coroutine scope for launching the scroll animation.
* @param listState The [LazyListState] of the message list.
* @param unreadCount The number of unread messages to display as a badge.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Te6edf3BoxScopeTb4b4b4.Td2a8ffScrollToBottomFabTb4b4b4(Te6edf3coroutineScopeTb4b4b4: Te6edf3CoroutineScopeTb4b4b4, Te6edf3listStateTb4b4b4: Te6edf3LazyListStateTb4b4b4, Te6edf3unreadCountTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3FloatingActionButtonTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3alignTb4b4b4(Te6edf3AlignmentTb4b4b4.Te6edf3BottomEndTb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3coroutineScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3listStateTb4b4b4.Te6edf3animateScrollToItemTb4b4b4(T79c0ff0Tb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3unreadCount Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3BadgedBoxTb4b4b4(Te6edf3badge Tff7b72= Tb4b4b4{ Te6edf3Badge Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3unreadCountTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowDownwardTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3scroll_to_bottomTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowDownwardTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3scroll_to_bottomTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── ReplySnippet ──

T8b949e/**
* Displays a snippet of the message being replied to.
*
* @param originalMessage The message being replied to, or null if not replying.
* @param onClearReply Callback to clear the reply state.
* @param ourNode The current user's node information, to display "You" if replying to self.
*/
Tf0883e@Composable
Tff7b72fun Td2a8ffReplySnippetTb4b4b4(Te6edf3originalMessageTb4b4b4: Te6edf3Message?Tb4b4b4, Te6edf3onClearReplyTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3ourNodeTb4b4b4: Te6edf3Node?Tb4b4b4) Tb4b4b4{
Te6edf3AnimatedVisibilityTb4b4b4(Te6edf3visible Tff7b72= Te6edf3originalMessage Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3originalMessageTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3message Tff7b72-Tff7b72>
Tff7b72val Te6edf3isFromLocalUser Tff7b72= Te6edf3messageTb4b4b4.Te6edf3fromLocal
Tff7b72val Te6edf3replyingToNodeUser Tff7b72= Tff7b72if Tb4b4b4(Te6edf3isFromLocalUserTb4b4b4) Te6edf3ourNodeTff7b72?.Te6edf3user Tff7b72else Te6edf3messageTb4b4b4.Te6edf3nodeTb4b4b4.Te6edf3user
Tff7b72val Te6edf3unknownUserText Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3unknownTb4b4b4)

Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72=
Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3clipTb4b4b4(Te6edf3RoundedCornerShapeTb4b4b4(T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3backgroundTb4b4b4(Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3surfaceVariantTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.5fTb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ReplyTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3replyTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariantTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3replying_toTb4b4b4, Te6edf3replyingToNodeUserTff7b72?.Te6edf3short_name Tff7b72?: Te6edf3unknownUserTextTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3labelMediumTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Te6edf3text Tff7b72= Te6edf3messageTb4b4b4.Te6edf3textTb4b4b4.Te6edf3ellipsizeTb4b4b4(Te6edf3SNIPPET_CHARACTER_LIMITTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Tb4b4b4)
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onClearReplyTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3MeshtasticIconsTb4b4b4.Te6edf3CloseTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3cancel_replyTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── DeleteMessageDialog ──

T8b949e/**
* A dialog confirming the deletion of messages.
*
* @param count The number of messages to be deleted.
* @param onConfirm Callback invoked when the user confirms the deletion.
* @param onDismiss Callback invoked when the dialog is dismissed.
*/
Tf0883e@Composable
Tff7b72fun Td2a8ffDeleteMessageDialogTb4b4b4(Te6edf3countTb4b4b4: Tffa657IntTb4b4b4, Te6edf3onConfirmTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3deleteMessagesString Tff7b72= Te6edf3pluralStringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3pluralsTb4b4b4.Te6edf3delete_messagesTb4b4b4, Te6edf3countTb4b4b4, Te6edf3countTb4b4b4)

Te6edf3MeshtasticTextDialogTb4b4b4(
Te6edf3titleRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3delete_messages_titleTb4b4b4,
Te6edf3message Tff7b72= Te6edf3deleteMessagesStringTb4b4b4,
Te6edf3confirmTextRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3deleteTb4b4b4,
Te6edf3onConfirm Tff7b72= Te6edf3onConfirmTb4b4b4,
Te6edf3onDismiss Tff7b72= Te6edf3onDismissTb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── TranslationModelDownloadDialog ──

T8b949e/**
* A dialog asking the user to confirm the one-time download of on-device translation models, then showing indeterminate
* progress while they download. Rendered as nothing when [state] is [TranslationDialogState.Hidden].
*
* @param state The current dialog state from [org.meshtastic.feature.messaging.MessageViewModel].
* @param onConfirm Callback invoked when the user confirms the model download.
* @param onDismiss Callback invoked when the prompt is dismissed.
*/
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffTranslationModelDownloadDialogTb4b4b4(
Te6edf3stateTb4b4b4: Te6edf3TranslationDialogStateTb4b4b4,
Te6edf3onConfirmTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72when Tb4b4b4(Te6edf3stateTb4b4b4) Tb4b4b4{
Tff7b72is Te6edf3TranslationDialogStateTb4b4b4.Te6edf3Hidden Tff7b72-Tff7b72> Tb4b4b4{Tb4b4b4}

Tff7b72is Te6edf3TranslationDialogStateTb4b4b4.Te6edf3DownloadPrompt Tff7b72-Tff7b72>
Te6edf3MeshtasticTextDialogTb4b4b4(
Te6edf3titleRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3translation_download_titleTb4b4b4,
Te6edf3message Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3translation_download_messageTb4b4b4, Te6edf3stateTb4b4b4.Te6edf3estimatedSizeMbTb4b4b4)Tb4b4b4,
Te6edf3confirmTextRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3downloadTb4b4b4,
Te6edf3dismissTextRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3cancelTb4b4b4,
Te6edf3onConfirm Tff7b72= Te6edf3onConfirmTb4b4b4,
Te6edf3onDismiss Tff7b72= Te6edf3onDismissTb4b4b4,
Tb4b4b4)

Tff7b72is Te6edf3TranslationDialogStateTb4b4b4.Te6edf3Downloading Tff7b72-Tff7b72>
Te6edf3MeshtasticDialogTb4b4b4(
Te6edf3titleRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3translation_download_titleTb4b4b4,
Te6edf3text Tff7b72= Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3CircularProgressIndicatorTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3translation_downloadingTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3dismissable Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── ActionModeTopBar & MessageMenuAction ──

T8b949e/** Actions available in the message selection mode's top bar. */
Tff7b72sealed Tff7b72class T56d364MessageMenuAction Tb4b4b4{
Tff7b72data Tff7b72object T56d364ClipboardCopy Tb4b4b4: Te6edf3MessageMenuActionTb4b4b4(Tb4b4b4)

Tff7b72data Tff7b72object T56d364Delete Tb4b4b4: Te6edf3MessageMenuActionTb4b4b4(Tb4b4b4)

Tff7b72data Tff7b72object T56d364Dismiss Tb4b4b4: Te6edf3MessageMenuActionTb4b4b4(Tb4b4b4)

Tff7b72data Tff7b72object T56d364SelectAll Tb4b4b4: Te6edf3MessageMenuActionTb4b4b4(Tb4b4b4)
Tb4b4b4}

T8b949e/**
* The top app bar displayed when in message selection mode.
*
* @param selectedCount The number of currently selected messages.
* @param onAction Callback for when a menu action is triggered.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffActionModeTopBarTb4b4b4(Te6edf3selectedCountTb4b4b4: Tffa657IntTb4b4b4, Te6edf3onActionTb4b4b4: Tb4b4b4(Te6edf3MessageMenuActionTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tff7b72= Te6edf3TopAppBarTb4b4b4(
Te6edf3title Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3selectedCountTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3navigationIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onActionTb4b4b4(Te6edf3MessageMenuActionTb4b4b4.Te6edf3DismissTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowBackTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3clear_selectionTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onActionTb4b4b4(Te6edf3MessageMenuActionTb4b4b4.Te6edf3ClipboardCopyTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3CopyTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3copyTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onActionTb4b4b4(Te6edf3MessageMenuActionTb4b4b4.Te6edf3DeleteTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3DeleteTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3deleteTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onActionTb4b4b4(Te6edf3MessageMenuActionTb4b4b4.Te6edf3SelectAllTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3SelectAllTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3select_allTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)

T8b949e// endregion

T8b949e// region ── MessageTopBar ──

T8b949e/**
* The default top app bar for the message screen.
*
* @param title The title to display (contact or channel name).
* @param channelIndex The index of the current channel, if applicable.
* @param mismatchKey True if there's a key mismatch for the current PKC.
* @param onNavigateBack Callback for the navigation icon.
* @param channels The set of all channels, used for the [SecurityIcon].
* @param channelIndexParam The specific channel index for the [SecurityIcon].
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffMessageTopBarTb4b4b4(
Te6edf3titleTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3channelIndexTb4b4b4: Tffa657Int?Tb4b4b4,
Te6edf3mismatchKeyTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onNavigateBackTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3channelsTb4b4b4: Te6edf3ChannelSet?Tb4b4b4,
Te6edf3channelIndexParamTb4b4b4: Tffa657Int?Tb4b4b4,
Te6edf3showQuickChatTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleQuickChatTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToQuickChatOptionsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3filteringDisabledTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3onToggleFilteringDisabledTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3filteredCountTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3showFilteredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3onToggleShowFilteredTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onNavigateToFilterSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onSearchClickTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tff7b72= Te6edf3TopAppBarTb4b4b4(
Te6edf3title Tff7b72= Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3titleTb4b4b4, Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4, Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff1T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4)

Tff7b72if Tb4b4b4(Te6edf3channels Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3channelIndexParam Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3SecurityIconTb4b4b4(Te6edf3channelsTb4b4b4, Te6edf3channelIndexParamTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3navigationIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onNavigateBackTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowBackTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3navigate_backTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onSearchClickTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3SearchTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3search_messagesTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3MessageTopBarActionsTb4b4b4(
Te6edf3showQuickChat Tff7b72= Te6edf3showQuickChatTb4b4b4,
Te6edf3onToggleQuickChat Tff7b72= Te6edf3onToggleQuickChatTb4b4b4,
Te6edf3onNavigateToQuickChatOptions Tff7b72= Te6edf3onNavigateToQuickChatOptionsTb4b4b4,
Te6edf3channelIndex Tff7b72= Te6edf3channelIndexTb4b4b4,
Te6edf3mismatchKey Tff7b72= Te6edf3mismatchKeyTb4b4b4,
Te6edf3filteringDisabled Tff7b72= Te6edf3filteringDisabledTb4b4b4,
Te6edf3onToggleFilteringDisabled Tff7b72= Te6edf3onToggleFilteringDisabledTb4b4b4,
Te6edf3filteredCount Tff7b72= Te6edf3filteredCountTb4b4b4,
Te6edf3showFiltered Tff7b72= Te6edf3showFilteredTb4b4b4,
Te6edf3onToggleShowFiltered Tff7b72= Te6edf3onToggleShowFilteredTb4b4b4,
Te6edf3onNavigateToFilterSettings Tff7b72= Te6edf3onNavigateToFilterSettingsTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffMessageTopBarActionsTb4b4b4(
Te6edf3showQuickChatTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleQuickChatTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToQuickChatOptionsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3channelIndexTb4b4b4: Tffa657Int?Tb4b4b4,
Te6edf3mismatchKeyTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3filteringDisabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleFilteringDisabledTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3filteredCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3showFilteredTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleShowFilteredTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToFilterSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3channelIndex Tff7b72=Tff7b72= Te6edf3NodeAddressTb4b4b4.Te6edf3PKC_CHANNEL_INDEXTb4b4b4) Tb4b4b4{
Te6edf3NodeKeyStatusIconTb4b4b4(Te6edf3hasPKC Tff7b72= Tff7b72trueTb4b4b4, Te6edf3mismatchKey Tff7b72= Te6edf3mismatchKeyTb4b4b4)
Tb4b4b4}
Tff7b72var Te6edf3expanded Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Tff7b72falseTb4b4b4) Tb4b4b4}
Te6edf3Box Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3expanded Tff7b72= Tff7b72true Tb4b4b4}Tb4b4b4, Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3MoreTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3overflow_menuTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3OverFlowMenuTb4b4b4(
Te6edf3expanded Tff7b72= Te6edf3expandedTb4b4b4,
Te6edf3onDismiss Tff7b72= Tb4b4b4{ Te6edf3expanded Tff7b72= Tff7b72false Tb4b4b4}Tb4b4b4,
Te6edf3showQuickChat Tff7b72= Te6edf3showQuickChatTb4b4b4,
Te6edf3onToggleQuickChat Tff7b72= Te6edf3onToggleQuickChatTb4b4b4,
Te6edf3onNavigateToQuickChatOptions Tff7b72= Te6edf3onNavigateToQuickChatOptionsTb4b4b4,
Te6edf3filteringDisabled Tff7b72= Te6edf3filteringDisabledTb4b4b4,
Te6edf3onToggleFilteringDisabled Tff7b72= Te6edf3onToggleFilteringDisabledTb4b4b4,
Te6edf3filteredCount Tff7b72= Te6edf3filteredCountTb4b4b4,
Te6edf3showFiltered Tff7b72= Te6edf3showFilteredTb4b4b4,
Te6edf3onToggleShowFiltered Tff7b72= Te6edf3onToggleShowFilteredTb4b4b4,
Te6edf3onNavigateToFilterSettings Tff7b72= Te6edf3onNavigateToFilterSettingsTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffOverFlowMenuTb4b4b4(
Te6edf3expandedTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3showQuickChatTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleQuickChatTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToQuickChatOptionsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3filteringDisabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleFilteringDisabledTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3filteredCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3showFilteredTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleShowFilteredTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToFilterSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3expandedTb4b4b4) Tb4b4b4{
Te6edf3DropdownMenuTb4b4b4(Te6edf3expanded Tff7b72= Te6edf3expandedTb4b4b4, Te6edf3onDismissRequest Tff7b72= Te6edf3onDismissTb4b4b4) Tb4b4b4{
Te6edf3DropdownMenuGroupTb4b4b4(Te6edf3shapes Tff7b72= Te6edf3MenuDefaultsTb4b4b4.Te6edf3groupShapesTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3QuickChatToggleMenuItemTb4b4b4(Te6edf3showQuickChatTb4b4b4, Te6edf3onDismissTb4b4b4, Te6edf3onToggleQuickChatTb4b4b4)
Te6edf3QuickChatOptionsMenuItemTb4b4b4(Te6edf3onDismissTb4b4b4, Te6edf3onNavigateToQuickChatOptionsTb4b4b4)
Tb4b4b4}
Te6edf3DropdownMenuGroupTb4b4b4(Te6edf3shapes Tff7b72= Te6edf3MenuDefaultsTb4b4b4.Te6edf3groupShapesTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3filteredCount Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Tff7b72!Te6edf3filteringDisabledTb4b4b4) Tb4b4b4{
Te6edf3FilteredMessagesMenuItemTb4b4b4(Te6edf3showFilteredTb4b4b4, Te6edf3filteredCountTb4b4b4, Te6edf3onDismissTb4b4b4, Te6edf3onToggleShowFilteredTb4b4b4)
Tb4b4b4}
Te6edf3FilterToggleMenuItemTb4b4b4(Te6edf3filteringDisabledTb4b4b4, Te6edf3onDismissTb4b4b4, Te6edf3onToggleFilteringDisabledTb4b4b4)
Te6edf3FilterSettingsMenuItemTb4b4b4(Te6edf3onDismissTb4b4b4, Te6edf3onNavigateToFilterSettingsTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffQuickChatToggleMenuItemTb4b4b4(Te6edf3showQuickChatTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onToggleTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3showQuickChatTb4b4b4) Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3quick_chat_hide Tff7b72else Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3quick_chat_showTb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onToggleTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Tff7b72if Tb4b4b4(Te6edf3showQuickChatTb4b4b4) Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Muted Tff7b72else Te6edf3MeshtasticIconsTb4b4b4.Te6edf3UnmutedTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffQuickChatOptionsMenuItemTb4b4b4(Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onNavigateTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3quick_chatTb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onNavigateTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{ Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ChatBubbleOutlineTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffFilteredMessagesMenuItemTb4b4b4(Te6edf3showFilteredTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3countTb4b4b4: Tffa657IntTb4b4b4, Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onToggleTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3showFilteredTb4b4b4) Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_hide_count Tff7b72else Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_show_countTb4b4b4, Te6edf3countTb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onToggleTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Tff7b72if Tb4b4b4(Te6edf3showFilteredTb4b4b4) Te6edf3MeshtasticIconsTb4b4b4.Te6edf3VisibilityOff Tff7b72else Te6edf3MeshtasticIconsTb4b4b4.Te6edf3VisibilityTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffFilterToggleMenuItemTb4b4b4(Te6edf3filteringDisabledTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onToggleTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72=
Te6edf3stringResourceTb4b4b4(
Tff7b72if Tb4b4b4(Te6edf3filteringDisabledTb4b4b4) Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_enable_for_contact Tff7b72else Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_disable_for_contactTb4b4b4,
Tb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onToggleTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Tff7b72if Tb4b4b4(Te6edf3filteringDisabledTb4b4b4) Te6edf3MeshtasticIconsTb4b4b4.Te6edf3FilterList Tff7b72else Te6edf3MeshtasticIconsTb4b4b4.Te6edf3FilterListOffTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffFilterSettingsMenuItemTb4b4b4(Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onNavigateTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_settingsTb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onNavigateTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{ Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3SettingsTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── QuickChatRow ──

T8b949e/**
* A row of quick chat action buttons.
*
* @param enabled Whether the buttons should be enabled.
* @param actions The list of [QuickChatAction]s to display.
* @param onClick Callback when a quick chat button is clicked.
*/
Tf0883e@Composable
Tff7b72fun Td2a8ffQuickChatRowTb4b4b4(
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3actionsTb4b4b4: Te6edf3ListTff7b72<Te6edf3QuickChatActionTff7b72>Tb4b4b4,
Te6edf3onClickTb4b4b4: Tb4b4b4(Te6edf3QuickChatActionTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3alertActionMessage Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3alert_bell_textTb4b4b4)
Tff7b72val Te6edf3alertAction Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3alertActionMessageTb4b4b4) Tb4b4b4{
Te6edf3QuickChatActionTb4b4b4(
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffπŸ””Ta5d6ff"Tb4b4b4,
Te6edf3message Tff7b72= Ta5d6ff"Ta5d6ffπŸ”” Tffd700$Te6edf3alertActionMessageTa5d6ff Ta5d6ff\Ta5d6ffu0007Ta5d6ff"Tb4b4b4,
Te6edf3mode Tff7b72= Te6edf3QuickChatActionTb4b4b4.Te6edf3ModeTb4b4b4.Te6edf3AppendTb4b4b4,
Te6edf3position Tff7b72= Tff7b72-T79c0ff1Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tff7b72val Te6edf3allActions Tff7b72= Te6edf3rememberTb4b4b4(Te6edf3alertActionTb4b4b4, Te6edf3actionsTb4b4b4) Tb4b4b4{ Te6edf3listOfTb4b4b4(Te6edf3alertActionTb4b4b4) Tff7b72+ Te6edf3actions Tb4b4b4}

Te6edf3LazyRowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3vertical Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3itemsTb4b4b4(Te6edf3allActionsTb4b4b4, Te6edf3key Tff7b72= Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3uuid Tb4b4b4}Tb4b4b4) Tb4b4b4{ Te6edf3action Tff7b72-Tff7b72>
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onClickTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4}Tb4b4b4, Te6edf3enabled Tff7b72= Te6edf3enabledTb4b4b4) Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3actionTb4b4b4.Te6edf3nameTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e/**
* Handles a quick chat action, either appending its message to the current text or sending it directly.
*
* @param action The [QuickChatAction] to handle.
* @param currentText The current text in the message input.
* @param onUpdateText Lambda to call when the text needs to be updated (for Append mode).
* @param onSendMessage Lambda to call when a message needs to be sent (for Instant mode).
*/
Tff7b72fun Td2a8ffhandleQuickChatActionTb4b4b4(
Te6edf3actionTb4b4b4: Te6edf3QuickChatActionTb4b4b4,
Te6edf3currentTextTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3onUpdateTextTb4b4b4: Tb4b4b4(Tffa657StringTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onSendMessageTb4b4b4: Tb4b4b4(Tffa657StringTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72when Tb4b4b4(Te6edf3actionTb4b4b4.Te6edf3modeTb4b4b4) Tb4b4b4{
Te6edf3QuickChatActionTb4b4b4.Te6edf3ModeTb4b4b4.Te6edf3Append Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3currentTextTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3actionTb4b4b4.Te6edf3messageTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3newText Tff7b72=
Te6edf3buildString Tb4b4b4{
Te6edf3appendTb4b4b4(Te6edf3currentTextTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3currentTextTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Tff7b72!Te6edf3currentTextTb4b4b4.Te6edf3endsWithTb4b4b4(Ta5d6ff' 'Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3appendTb4b4b4(Ta5d6ff' 'Tb4b4b4)
Tb4b4b4}
Te6edf3appendTb4b4b4(Te6edf3actionTb4b4b4.Te6edf3messageTb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3limitBytesTb4b4b4(Te6edf3MESSAGE_CHARACTER_LIMIT_BYTESTb4b4b4)
Te6edf3onUpdateTextTb4b4b4(Te6edf3newTextTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Te6edf3QuickChatActionTb4b4b4.Te6edf3ModeTb4b4b4.Te6edf3Instant Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3onSendMessageTb4b4b4(Te6edf3actionTb4b4b4.Te6edf3messageTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── UnreadMessagesDivider ──

Tf0883e@Composable
Tff7b72fun Td2a8ffUnreadMessagesDividerTb4b4b4(Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3HorizontalDividerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3new_messages_belowTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3labelMediumTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primaryTb4b4b4,
Tb4b4b4)
Te6edf3HorizontalDividerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── MessageStatusDialog ──

Tf0883e@Composable
Tff7b72fun Td2a8ffMessageStatusDialogTb4b4b4(
Te6edf3messageTb4b4b4: Te6edf3MessageTb4b4b4,
Te6edf3resendOptionTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onResendTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3isDirectMessageTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Tb4b4b4(Te6edf3titleTb4b4b4, Te6edf3textTb4b4b4) Tff7b72= Te6edf3messageTb4b4b4.Te6edf3getStatusStringResTb4b4b4(Te6edf3isDirectMessageTb4b4b4)
Te6edf3DeliveryInfoTb4b4b4(
Te6edf3title Tff7b72= Te6edf3titleTb4b4b4,
Te6edf3resendOption Tff7b72= Te6edf3resendOptionTb4b4b4,
Te6edf3text Tff7b72= Te6edf3textTb4b4b4,
Te6edf3detail Tff7b72= Te6edf3messageTb4b4b4.Te6edf3getStatusDetailResTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3relays Tff7b72= Te6edf3messageTb4b4b4.Te6edf3relaysTb4b4b4,
Te6edf3onConfirm Tff7b72= Te6edf3onResendTb4b4b4,
Te6edf3onDismiss Tff7b72= Te6edf3onDismissTb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── Utility Functions ──

T8b949e/** The maximum number of characters to display in the reply snippet. */
Tff7b72internal Tff7b72const Tff7b72val Te6edf3SNIPPET_CHARACTER_LIMIT Tff7b72= T79c0ff5T79c0ff0

T8b949e/** The maximum byte size for a message. */
Tff7b72const Tff7b72val Te6edf3MESSAGE_CHARACTER_LIMIT_BYTES Tff7b72= T79c0ff2T79c0ff0T79c0ff0

T8b949e/**
* Ellipsizes a string if its length exceeds [maxLength].
*
* @param maxLength The maximum number of characters to display before adding "…".
* @return The ellipsized string.
* @receiver The string to ellipsize.
*/
Tff7b72fun Te6edf3StringTb4b4b4.Td2a8ffellipsizeTb4b4b4(Te6edf3maxLengthTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Tff7b72if Tb4b4b4(Te6edf3length Tff7b72> Te6edf3maxLengthTb4b4b4) Ta5d6ff"Tffd700${Te6edf3takeTb4b4b4(Te6edf3maxLengthTb4b4b4)Tffd700}Ta5d6ff…Ta5d6ff" Tff7b72else Tff7b72this

T8b949e/**
* Truncates a string to ensure its UTF-8 byte representation does not exceed [maxBytes].
*
* @param maxBytes The maximum allowed byte length.
* @return The truncated string, or the original string if it's within the byte limit.
* @receiver The string to limit.
*/
Tff7b72fun Te6edf3StringTb4b4b4.Td2a8fflimitBytesTb4b4b4(Te6edf3maxBytesTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3bytes Tff7b72= Tff7b72thisTb4b4b4.Te6edf3encodeToByteArrayTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3bytesTb4b4b4.Te6edf3size Tff7b72<Tff7b72= Te6edf3maxBytesTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72this
Tb4b4b4}

Tff7b72var Te6edf3currentBytesSum Tff7b72= T79c0ff0
Tff7b72var Te6edf3validCharCount Tff7b72= T79c0ff0
Tff7b72for Tb4b4b4(Te6edf3charIndex Tff7b72in Tff7b72thisTb4b4b4.Te6edf3indicesTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3charToTest Tff7b72= Tff7b72thisTff7b72[Te6edf3charIndexTff7b72]
Tff7b72val Te6edf3charBytes Tff7b72= Te6edf3charToTestTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3encodeToByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3size
Tff7b72if Tb4b4b4(Te6edf3currentBytesSum Tff7b72+ Te6edf3charBytes Tff7b72> Te6edf3maxBytesTb4b4b4) Tb4b4b4{
Tff7b72break
Tb4b4b4}
Te6edf3currentBytesSum Tff7b72+Tff7b72= Te6edf3charBytes
Te6edf3validCharCountTff7b72+Tff7b72+
Tb4b4b4}
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3substringTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3validCharCountTb4b4b4)
Tb4b4b4}

T8b949e// endregion

T8b949e// region ── MessageSearchBar ──

T8b949e/**
* M3 contextual search bar that replaces the standard MessageTopBar when search is active. Follows the M3 "find in
* page" pattern: back arrow + text field + "X of Y" counter + prev/next arrows + clear.
*
* This uses [TopAppBar] rather than [SearchBar] because we're filtering within an existing conversation (contextual
* search), not performing primary app-level navigation search.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffMessageSearchBarTb4b4b4(
Te6edf3queryTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3onQueryChangeTb4b4b4: Tb4b4b4(Tffa657StringTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onCloseTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3resultCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3currentIndexTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3onPreviousTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onNextTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TopAppBarTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4,
Te6edf3navigationIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onCloseTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowBackTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3navigate_backTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3title Tff7b72= Tb4b4b4{
Te6edf3TextFieldTb4b4b4(
Te6edf3value Tff7b72= Te6edf3queryTb4b4b4,
Te6edf3onValueChange Tff7b72= Te6edf3onQueryChangeTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3placeholder Tff7b72= Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3search_messagesTb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3singleLine Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3textStyle Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Te6edf3colors Tff7b72=
Te6edf3TextFieldDefaultsTb4b4b4.Te6edf3colorsTb4b4b4(
Te6edf3focusedContainerColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4,
Te6edf3unfocusedContainerColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4,
Te6edf3focusedIndicatorColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4,
Te6edf3unfocusedIndicatorColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3queryTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3resultCount Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Ta5d6ff"Tffd700${Te6edf3currentIndex Tff7b72+ T79c0ff1Tffd700}Ta5d6ff / Tffd700$Te6edf3resultCountTa5d6ff"Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariantTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3end Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onPreviousTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3KeyboardArrowUpTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3search_messagesTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onNextTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3KeyboardArrowDownTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3search_messagesTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3queryTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onQueryChangeTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3CloseTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3clearTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// endregion

Served by rngit 1.5.0 - Generated in 0.16s